读书是改变命运的最好办法

04 第4章:部署实战(含代码)

第4章:部署实战(含代码)

掌握了大模型私有化部署的核心概念和硬件规划后,本章将进入激动人心的实战环节。我们将手把手指导您完成 DeepSeek 大模型的部署,从简单的单机快速启动,到复杂的集群编排,再到实用的模型量化和版本管理,力求通过丰富的代码示例和操作步骤,让您真正掌握 DeepSeek 大模型的私有化落地技能。

单机部署:使用 Hugging Face transformers 和 fschat 快速启动

对于初步测试、开发验证或对并发性能要求不高的场景,单机部署是最快捷的方案。DeepSeek 模型作为 Hugging Face 生态系统的重要组成部分,可以直接利用 transformers 库进行加载和推理。为了提供一个易于调用的 API 接口,我们通常会结合 fschat 这样的开源项目来封装推理服务。

前提条件

  • 一台配置有 NVIDIA GPU(推荐 24GB 显存或更高)的 Linux 服务器。
  • 已安装 NVIDIA 驱动和 CUDA 工具包(确保版本兼容 PyTorch)。
  • 已安装 Python 3.8+ 及 pip 包管理器。

操作步骤

  1. 安装所需 Python 库:

我们将安装 Hugging Face 的核心库 transformers 和 PyTorch,以及用于加速推理的 accelerate。同时,为了提供一个类似 OpenAI API 的接口,我们安装 fschat 及其必要的组件。

pip install transformers torch accelerate
pip install "fschat[model_worker,webui]" # 安装 fschat 及模型工作节点和 Web UI 相关依赖
  • 出处:transformers 和 torch 是 Hugging Face 和 PyTorch 官方维护的深度学习库,accelerate 也是 Hugging Face 的加速工具,这些都是业界标准。fschat 是一个流行的用于 LLM 服务和 API 的开源项目,由 LMSYS Org 维护,您可以在 LMSYS FastChat GitHub 仓库 找到其详细信息。

  • 下载 DeepSeek 模型权重并进行推理:

从 Hugging Face 模型 Hub 下载您选择的 DeepSeek 模型权重。以 deepseek-ai/deepseek-moe-16b-chat 为例,这是一个基于 MoE 架构的聊天模型。

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_name = "deepseek-ai/deepseek-moe-16b-chat"

# 加载 Tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name)

# 加载模型
# 使用 bfloat16 精度加载模型,以节省显存并加速推理(适用于支持 bfloat16 的 GPU,如 A100/H100)
# 如果GPU不支持 bfloat16 或显存不足,可以尝试 torch.float16 或加载量化版本。
# device_map="auto" 会自动将模型层分配到可用的设备(GPU/CPU)。
model = AutoModelForCausalLM.from_pretrained(model_name,
                                             torch_dtype=torch.bfloat16,
                                             device_map="auto",
                                             trust_remote_code=True) # DeepSeek模型可能需要trust_remote_code
model.eval() # 设置模型为评估模式

print(f"DeepSeek model {model_name} loaded successfully to GPU(s).")

# 简单推理示例
messages = [
    {"role": "user", "content": "Hello, how are you today?"},
]

# 将消息列表转换为模型所需的输入格式
# DeepSeek 模型通常遵循 ChatML 格式或其他特定聊天模板
input_text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(input_text, return_tensors="pt").to(model.device)

# 生成响应
with torch.no_grad():
    outputs = model.generate(**inputs,
                             max_new_tokens=100,
                             do_sample=True,
                             temperature=0.7,
                             top_p=0.9,
                             eos_token_id=tokenizer.eos_token_id)

response_tokens = outputs[0][inputs["input_ids"].shape[1]:] # 移除输入部分
response = tokenizer.decode(response_tokens, skip_special_tokens=True)
print("Model Response:", response)
  • 出处:DeepSeek 模型权重托管在 Hugging Face 模型 Hub 上,这是业界标准的模型共享平台。DeepSeek AI 官方账户下的模型都是经过验证的。AutoModelForCausalLM 和 AutoTokenizer 是 transformers 库的核心类,用于加载预训练模型和对应的分词器。

  • 启动 API 服务(使用 fschat):

为了方便外部应用调用,我们通常会将模型封装成一个兼容 OpenAI API 规范的服务。fschat 提供了一个便捷的方式。

首先,在第一个终端窗口中启动 fschat 控制器

python -m fschat.serve.controller

这个控制器管理着模型工作节点的注册和协调。

然后,在第二个终端窗口中启动 DeepSeek 模型的工作节点 (Model Worker)。替换 YOUR_MODEL_PATH 为您模型在本地的实际路径(Hugging Face 会自动缓存模型到 ~/.cache/huggingface/hub/ 目录下)。或者,直接使用 Hugging Face ID,fschat 会尝试从 Hugging Face Hub 加载或使用缓存。

# 使用模型名称,fschat会尝试从huggingface加载或使用缓存
python -m fschat.serve.model_worker --model-path deepseek-ai/deepseek-moe-16b-chat --host 0.0.0.0 --port 21002 --gpus all --dtype bfloat16 --trust-remote-code
# `--gpus all` 表示使用所有可用GPU,`--dtype bfloat16` 指定模型加载精度
# `--trust-remote-code` 对于一些自定义模型代码是必需的
  • 注意:如果模型较大,此步骤需要较长时间加载模型到显存。--gpus all 会尝试将模型均匀分配到所有可用 GPU 上,如果单卡显存足够,也可以指定 --gpus 0 来使用第一张卡。

最后,在第三个终端窗口中启动 API 服务器

python -m fschat.serve.api_server --host 0.0.0.0 --port 8000

API 服务器负责将客户端请求转发给控制器,再由控制器调度到可用的模型工作节点。

通过 curl 命令或 Python 脚本测试 API。

Bash

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/deepseek-moe-16b-chat",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "Hello, can you tell me a fun fact about cats?"}
    ],
    "temperature": 0.7,
    "max_tokens": 50
  }'

您将收到类似 OpenAI API 的 JSON 响应,包含模型的生成内容。

集群部署:Kubernetes + Helm Chart 编排

对于生产环境,单机部署的局限性显而易见。Kubernetes (K8s) 结合 Helm Chart 是实现 DeepSeek 大模型高可用、可伸缩、易管理的集群部署的理想方案。

前提条件

  • 一个运行中的 Kubernetes 集群(例如通过 kubeadm, k3s, EKS, AKS, GKE 等方式搭建)。
  • Kubernetes 集群已配置 NVIDIA GPU Operator 或手动安装了 GPU 驱动及 nvidia-container-toolkit,以确保 K8s 能够调度 GPU 资源。
  • 已安装 kubectl 和 helm 命令行工具。
  • 已准备 DeepSeek 模型 Docker 镜像(通常基于推理框架如 vLLM 构建)。

概念回顾

  • Kubernetes Pod:K8s 中最小的可部署计算单元,可以包含一个或多个容器。
  • Deployment:声明式地管理 Pod 的副本数量和更新策略。
  • Service:定义一组 Pod 的逻辑抽象和访问策略(负载均衡)。
  • ConfigMap/Secret:用于存储配置数据和敏感信息。
  • PersistentVolume/PersistentVolumeClaim (PV/PVC):用于提供持久化存储。
  • Helm Chart:K8s 应用程序的打包格式,简化部署和管理。

操作步骤

  1. 构建 DeepSeek 模型服务 Docker 镜像:

为了在 K8s 中运行 DeepSeek 模型,我们需要将其推理服务打包成 Docker 镜像。这里我们以 vLLM 作为推理框架为例,因为它在 LLM 服务领域表现出色。

创建 Dockerfile:

# 使用包含CUDA和Python的基础镜像
# 选择与您GPU驱动和CUDA版本兼容的镜像
FROM nvcr.io/nvidia/pytorch:23.07-py3 # 或其他适合的CUDA/Python镜像

WORKDIR /app

# 安装vLLM及其依赖
RUN pip install vllm transformers torch accelerate

# 如果希望模型预加载到镜像中,取消注释并执行以下行。
# 注意:这会使镜像非常大。更推荐通过PersistentVolumeClaim挂载模型。
# RUN python -c "from transformers import AutoTokenizer, AutoModelForCausalLM; AutoTokenizer.from_pretrained('deepseek-ai/deepseek-moe-16b-chat', trust_remote_code=True); AutoModelForCausalLM.from_pretrained('deepseek-ai/deepseek-moe-16b-chat', trust_remote_code=True)"

# 暴露vLLM服务的端口
EXPOSE 8000

# 启动vLLM服务
# --model 指定模型路径或Hugging Face ID
# --trust-remote-code 适用于一些DeepSeek模型需要运行自定义代码
# --tensor-parallel-size 用于多卡推理的张量并行数,根据实际GPU数量调整
# --dtype bfloat16 或 float16,与模型加载精度一致
CMD ["python", "-m", "vllm.entrypoints.api_server", "--host", "0.0.0.0", "--port", "8000", "--model", "deepseek-ai/deepseek-moe-16b-chat", "--tensor-parallel-size", "1", "--dtype", "bfloat16", "--trust-remote-code"]
  • 出处:vLLM 的命令行参数和 Docker 部署方式可以在 vLLM GitHub 仓库 的文档中找到。基础镜像通常来自 NVIDIA NGC 容器注册表,确保 CUDA 和 PyTorch 环境的兼容性。

构建并推送 Docker 镜像(替换 your-registry 为您的 Docker 仓库地址):

docker build -t your-registry/deepseek-vllm:latest .
docker push your-registry/deepseek-vllm:latest
  1. 创建 Helm Chart:

Helm Chart 是 K8s 应用程序的打包工具,可以定义 Deployment、Service、ConfigMap 等 K8s 资源。

创建 Chart 目录结构:

helm create deepseek-llm-chart
cd deepseek-llm-chart

修改 values.yaml(这个文件定义了 Chart 的可配置参数):

# deepseek-llm-chart/values.yaml
replicaCount: 1 # 模型服务副本数,根据需求和可用GPU资源调整

image:
  repository: your-registry/deepseek-vllm # 替换为你的Docker镜像地址
  tag: latest # 替换为你的镜像标签
  pullPolicy: IfNotPresent # 如果本地有同名镜像则不重新拉取

service:
  type: ClusterIP # 或 NodePort, LoadBalancer,根据访问需求选择
  port: 8000 # 容器暴露的端口

resources:
  limits:
    nvidia.com/gpu: 1 # 每个Pod使用1块GPU,确保K8s集群已配置GPU调度
    memory: "64Gi" # 限制Pod最大内存使用
    cpu: "16" # 限制Pod最大CPU使用
  requests:
    nvidia.com/gpu: 1 # 请求1块GPU
    memory: "32Gi" # 请求32Gi内存
    cpu: "8" # 请求8核CPU

# 如果模型通过PersistentVolumeClaim (PVC) 挂载,配置以下部分
# persistentVolumeClaim:
#   enabled: false # 设置为true启用PVC
#   name: deepseek-model-pvc # PVC的名称,需要提前创建
#   mountPath: /models # 模型文件在容器内部的挂载路径
#   size: 200Gi # PVC的存储大小,根据模型和缓存大小调整
#   accessModes:
#     - ReadOnlyMany # 或 ReadWriteOnce, ReadWriteMany,根据共享方式选择

修改 templates/deployment.yaml:

确保 Pod 模板中的 containers 部分正确引用了镜像和资源限制,并添加 GPU 资源请求。如果使用 PVC 挂载模型,也需要在此处添加 volumeMounts 和 volumes 配置。

YAML

# deepseek-llm-chart/templates/deployment.yaml (部分关键内容)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "deepseek-llm-chart.fullname" . }}
  labels:
    {{- include "deepseek-llm-chart.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      {{- include "deepseek-llm-chart.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      {{- with .Values.podAnnotations }}
      annotations:
        {{- toYaml . | nindent 8 }}
      {{- end }}
      labels:
        {{- include "deepseek-llm-chart.selectorLabels" . | nindent 12 }}
    spec:
      # serviceAccountName: {{ include "deepseek-llm-chart.serviceAccountName" . }} # 如果需要Service Account
      securityContext:
        {{- toYaml .Values.podSecurityContext | nindent 12 }}
      containers:
        - name: {{ .Chart.Name }}
          securityContext:
            {{- toYaml .Values.securityContext | nindent 16 }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - name: http
              containerPort: {{ .Values.service.port }}
              protocol: TCP
          resources:
            {{- toYaml .Values.resources | nindent 16 }}
          # 如果通过PVC挂载模型,添加volumeMounts
          # volumeMounts:
          #   - name: model-storage
          #     mountPath: {{ .Values.persistentVolumeClaim.mountPath }} # 容器内部模型路径
      # 如果通过PVC挂载模型,添加volumes
      # volumes:
      #   - name: model-storage
      #     persistentVolumeClaim:
      #       claimName: {{ .Values.persistentVolumeClaim.name }}
      {{- with .Values.nodeSelector }}
      nodeSelector: # 允许将Pod调度到特定节点
        {{- toYaml . | nindent 12 }}
      {{- end }}
      {{- with .Values.affinity }}
      affinity: # 更复杂的调度规则
        {{- toYaml . | nindent 12 }}
      {{- end }}
      {{- with .Values.tolerations }}
      tolerations: # 允许Pod调度到被污染的节点
        {{- toYaml . | nindent 12 }}
      {{- end }}
  • 出处:Kubernetes Deployment 和 Service 的 YAML 结构是 K8s 官方文档的规范。Helm Chart 的结构也是 Helm 官方文档定义的。

  • 部署 Helm Chart:

在 deepseek-llm-chart 目录下执行:

helm install deepseek-llm deepseek-llm-chart/
  1. 验证部署
kubectl get pods -l app.kubernetes.io/instance=deepseek-llm # 查看Pod状态
kubectl get svc deepseek-llm-chart # 查看Service信息

通过 Service 的 IP 和端口,即可访问部署在 K8s 集群中的 DeepSeek 模型服务。如果 Service Type 是 LoadBalancer,则可以通过外部 IP 访问。

模型量化部署(4bit/8bit GGUF 实战)

模型量化是降低模型显存占用、提升推理速度的关键技术。GGUF 格式因其良好的兼容性和量化支持,成为私有化部署中的热门选择,尤其适用于 CPU 或显存有限的 GPU 环境。

前提条件

  • 已安装 llama-cpp-python 库。
  • 已安装 auto-gptq 或 ctransformers 等工具,用于模型量化(如果模型是原始 FP16/BF16 格式)。
  • 具备足够的 CPU 内存(量化过程可能需要大量 CPU 内存,通常是模型大小的数倍)。

操作步骤

  1. 安装所需库

Bash

pip install llama-cpp-python
pip install "auto-gptq[dev]" # 或者 pip install ctransformers
  • 出处:llama-cpp-python 是 llama.cpp 的 Python 绑定,其安装和使用说明可在 llama-cpp-python GitHub 仓库 找到。auto-gptq 是 GPTQ 量化工具,其项目地址为 AutoGPTQ GitHub 仓库

  • 转换模型为 GPTQ 格式 (可选,如果 DeepSeek 模型是原始 FP16/BF16 格式):

如果您的 DeepSeek 模型尚未量化,可以使用 auto-gptq 工具将其转换为 4-bit 或 8-bit GPTQ 格式。这步通常在 GPU 上执行。

Python

from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
from transformers import AutoTokenizer
import torch

model_name = "deepseek-ai/deepseek-moe-16b-chat" # 原始模型名称
quantized_model_dir = "./deepseek-moe-16b-chat-4bit-gptq" # 量化后模型保存路径

# 加载原始模型和tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
# 使用float16加载,降低显存占用
model = AutoGPTQForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, low_cpu_mem_usage=True, trust_remote_code=True)

# 定义量化配置
quantize_config = BaseQuantizeConfig(
    bits=4,  # 量化到4比特
    group_size=128, # 量化组大小
    desc_act=False, # 是否按激活值排序,通常False即可
    # calibration_dataset_name="wikitext2", # 用于校准的数据集,可选,提高精度
    # quant_method="gptq", # 显式指定量化方法
)

# 执行量化
# 注意:量化过程可能需要较长时间和大量内存,确保有足够的RAM和GPU显存
print("Starting GPTQ quantization...")
model.quantize(tokenizer, quantize_config=quantize_config)
print("Quantization complete. Saving model...")

# 保存量化后的模型
model.save_pretrained(quantized_model_dir, tokenizer=tokenizer)
print(f"Quantized model saved to {quantized_model_dir}")
  1. 转换模型为 GGUF 格式:

一旦模型被量化为 Hugging Face 格式(或直接从 Hugging Face 下载了已经量化为 Hugging Face 格式的模型),我们可以使用 llama.cpp 提供的工具链中的 convert.py 脚本将其转换为 GGUF 格式。

首先,克隆 llama.cpp 仓库并安装其依赖:

Bash

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
pip install -r requirements.txt

然后,运行转换脚本。假设您已经将 DeepSeek 模型的 Hugging Face 格式版本(无论是原始 FP16/BF16 还是 GPTQ 量化版)下载或保存到了 ./deepseek-moe-16b-chat 或 ./deepseek-moe-16b-chat-4bit-gptq 目录。

Bash

# 假设你已经下载了Hugging Face格式的deepseek-moe-16b-chat到 ./deepseek-moe-16b-chat 目录
# 如果你刚通过auto-gptq量化并保存到 `./deepseek-moe-16b-chat-4bit-gptq`,请使用那个路径作为输入
HF_MODEL_PATH="./deepseek-moe-16b-chat" # 或者 "./deepseek-moe-16b-chat-4bit-gptq"
GGUF_OUTPUT_FILE="../deepseek-moe-16b-chat-q4_0.gguf" # 输出GGUF文件名

# 运行转换脚本。
# --outtype q4_0 表示4bit量化 (如果输入已经是量化模型,会尝试保持精度)
# --outtype q8_0 表示8bit量化
# --outtype f16 表示16bit浮点数 (如果从原始模型转换)
python convert.py ${HF_MODEL_PATH} --outtype q4_0 --outfile ${GGUF_OUTPUT_FILE}
  • 出处:llama.cpp 的模型转换工具和用法都在其 官方 GitHub 仓库 中,convert.py 是其核心脚本之一。

  • 使用 llama-cpp-python 部署 GGUF 模型:

llama-cpp-python 是 llama.cpp 的 Python 绑定,可以加载 GGUF 格式的模型,并在 CPU 和 GPU 上进行高效推理。

Python

from llama_cpp import Llama
from fastapi import FastAPI
from pydantic import BaseModel
import uvicorn
import os

# 确保 GGUF 模型文件存在
model_path = "./deepseek-moe-16b-chat-q4_0.gguf"
if not os.path.exists(model_path):
    print(f"Error: GGUF model file not found at {model_path}. Please run conversion steps first.")
    exit(1)

# 加载GGUF模型
# n_gpu_layers=-1 表示将所有可能的层加载到GPU,以最大化GPU利用率。
# n_ctx 定义了上下文窗口大小。
llm = Llama(model_path=model_path,
            n_ctx=4096, # 根据模型和需求调整上下文窗口
            n_gpu_layers=-1, # 将所有可加载到GPU的层都加载到GPU上
            verbose=True) # 开启详细日志

app = FastAPI()

class ChatRequest(BaseModel):
    prompt: str
    max_tokens: int = 256
    temperature: float = 0.7
    top_p: float = 0.9

@app.post("/generate")
async def generate_text(request: ChatRequest):
    try:
        output = llm(
            request.prompt,
            max_tokens=request.max_tokens,
            temperature=request.temperature,
            top_p=request.top_p,
            stop=["<|eot_id|>", "</s>"], # DeepSeek 通常的停止词
            echo=False # 不返回原始prompt
        )
        return {"response": output["choices"][0]["text"]}
    except Exception as e:
        return {"error": str(e)}, 500

# 运行API服务
# 在终端执行:uvicorn your_script_name:app --host 0.0.0.0 --port 8001
# 请将 your_script_name 替换为保存此Python代码的文件名 (例如: deepseek_api.py)
  • 出处:llama-cpp-python 的 API 使用方式可以在其 GitHub 仓库 中找到。FastAPI 是一个流行的 Python Web 框架,其使用方式可在 FastAPI 官方文档 中找到。

模型热更新与版本管理

在生产环境中,模型需要不断迭代更新,同时要保证服务的连续性。模型热更新版本管理是实现这一目标的关键策略。

  • 模型热更新:

“热更新”指的是在不停止现有服务的情况下,加载新版本的模型。这通常通过以下方式实现:

  1. 进程内更新 (In-process update):某些推理框架(如 Triton Inference Server, SGLang)支持在运行时加载/卸载模型,允许您更新模型文件后通知服务重新加载。这需要推理服务本身具备这种能力。
  2. 滚动更新 (Rolling Update):这是 Kubernetes 中实现热更新的常用策略。当您更新 Deployment 的 Docker 镜像标签或配置时,K8s 会逐个终止旧的 Pod,并启动新的 Pod。在旧 Pod 完全终止前,新的 Pod 已经开始提供服务,从而实现零停机更新。
  3. 蓝绿部署 (Blue/Green Deployment):部署一个与当前生产环境(蓝色环境)完全独立的新环境(绿色环境),在新环境上部署新模型并进行充分测试。测试通过后,将流量从蓝色环境一次性切换到绿色环境。这种方式风险最低,但资源消耗较高。
  4. 金丝雀发布 (Canary Release):新模型版本首先只向一小部分用户(“金丝雀”)发布,如果反馈良好,则逐步扩大发布范围,直至完全取代旧版本。这允许您在全面发布前发现潜在问题。

  5. 版本管理策略:

良好的版本管理对于模型的生命周期至关重要,包括模型权重版本、Docker 镜像版本和 Helm Chart 版本。

  1. 模型权重版本:
    • 将不同版本的 DeepSeek 模型权重(无论是原始的、微调的还是量化的)存储在对象存储(如 S3, MinIO)或私有模型仓库(如 MLflow Model Registry, Hugging Face Hub 私有仓库)中,并用明确的标签或哈希值进行版本标记。
    • 例如:deepseek-moe-16b-chat-v1.0-fp16, deepseek-moe-16b-chat-v1.1-q4_0。
  2. Docker 镜像版本:
    • 为每个模型服务 Docker 镜像打上清晰的版本标签,例如 your-registry/deepseek-vllm:1.0.0, your-registry/deepseek-vllm:1.1.0-deepseek-moe-16b-chat-q4_0。
    • 确保 Dockerfile 中的模型路径或 Hugging Face ID 与镜像版本对应。
  3. Helm Chart 版本:
    • 每次对 K8s 部署配置(values.yaml, templates/*.yaml)进行重大更改时,更新 Helm Chart 的 Chart.yaml 中的 version 字段。
    • 这允许您使用 helm rollback 命令轻松回滚到旧的部署配置。

实现示例 (Kubernetes 滚动更新)

当您更新 DeepSeek 模型服务对应的 Docker 镜像时,只需修改 Helm Chart 的 values.yaml 或直接使用 kubectl set image 命令,Kubernetes 就会自动执行滚动更新。

  1. 更新 values.yaml 中的镜像版本
# deepseek-llm-chart/values.yaml
image:
  repository: your-registry/deepseek-vllm
  tag: new-model-version # 将这里更改为新的镜像标签,例如 1.1.0
  pullPolicy: IfNotPresent
  1. 应用 Helm Chart 更新:

在 deepseek-llm-chart 目录下执行:

helm upgrade deepseek-llm deepseek-llm-chart/

Kubernetes 将会逐个替换 Pod,确保服务不中断。您可以通过 kubectl rollout status deployment/deepseek-llm 命令监控更新进度。

  1. 回滚(如果新版本有问题):

如果新版本出现问题,可以快速回滚到上一个稳定的版本:

helm rollback deepseek-llm

或者回滚到特定历史版本:

helm rollback deepseek-llm [REVISION_NUMBER]

您可以使用 helm history deepseek-llm 查看所有历史版本及其对应的修订号。

通过以上部署实战内容,您应该对 DeepSeek 大模型的私有化部署有了更清晰的认识,并具备了从单机到集群、从量化到版本管理的基本操作能力。


参考资源列表

  • Hugging Face transformers 库:
  • GitHub: https://github.com/huggingface/transformers
  • 文档: https://huggingface.co/docs/transformers/index
  • DeepSeek AI Hugging Face 模型 Hu:
  • DeepSeek AI Models: https://huggingface.co/deepseek-ai
  • FastChat (fschat):
  • GitHub: https://github.com/lmsys/FastChat
  • vLLM 官方文档:
  • GitHub: https://github.com/vllm-project/vllm
  • 文档: https://docs.vllm.ai/en/latest/
  • NVIDIA NGC 容器注册表:
  • NVIDIA NGC: https://catalog.ngc.nvidia.com/
  • Docker 官方文档:
  • https://docs.docker.com/
  • Kubernetes 官方文档:
  • https://kubernetes.io/docs/
  • Kubernetes GPU 支持: https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/
  • Helm 官方文档:
  • https://helm.sh/docs/
  • llama.cpp 项目:
  • GitHub: https://github.com/ggerganov/llama.cpp
  • llama-cpp-python 项目:
  • GitHub: https://github.com/abetlen/llama-cpp-python
  • auto-gptq 项目:
  • GitHub: https://github.com/AutoGPTQ/AutoGPTQ
  • FastAPI 官方文档:
  • https://fastapi.tiangolo.com/